package com.ftg.learn.controller;

import com.ftg.learn.dto.ModifyBuyNumInCartDto;
import com.ftg.learn.service.CartService;
import com.ftg.learn.util.JwtUtil;
import com.ftg.learn.util.R;
import com.ftg.learn.util.TipUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * 购物车控制 层
 * <p>
 * 添加商品到购物车功能
 * <p>
 * 2.1.1.1.2 有商品时,商品列表
 * 后台 要开发一个查询功能 - redis
 * 2.1.1.2 商品修改买入数量
 * 后台 要开发一个对某一购物车里面某一商品买入数量的操作
 * <p>
 * 2.1.1.3 商品从购物车删除
 * 后台 要开发一个对某一购物车里面某一商品删除操作
 * <p>
 * 2.1.1.4 清空购物车
 * 后台 要开发一个对某一购物车所有商品删除操作
 *
 * @author 布衣
 */
@RestController
@RequestMapping("/cart")
@Api(tags = "购物车模块")
public class CartController {

    /**
     * 是不是应该登陆成功以后，传递过来
     * userid telphone name ...相关信息，加密以后传递
     *      登陆成功以后 ： token 串
     *      有token串的
     *
     */

    @Resource
    CartService cartService;

    /**
     * 添加商品到购物车
     *
     * @param token 登陆成功以后的用户信息
     * @param prodId 商品id
     * @return R<String>
     */
    @PostMapping("/add")
    @ApiOperation(value = "添加商品到购物车")
    public R<String> addToCart(
            @RequestHeader(value = "token", required = true) String token,
            @RequestParam(value = "prodId", required = true) String prodId
    ) {
        String userId = JwtUtil.getValFromToken(token,"userId").toString();
        return cartService.addToCart(userId, prodId);
    }

    /**
     * 获取购物车列表
     *
     * @param token 登陆成功以后的用户信息
     * @return 商品列表信息
     */
    @GetMapping("/list")
    @ApiOperation(value = "获取购物车列表")
    public R<String> getDataFromRedis(
            @RequestHeader(value = "token", required = true) String token
    ) {
        String userId = JwtUtil.getValFromToken(token,"userId").toString();
        return cartService.getDataFormRedis(userId);
    }

    /**
     * 修改购物车商品数量
     *
     * @param buyNumDto 修改购物车商品数量
     * @param token 令牌
     * @return R<String>
     */
    @PutMapping("/update")
    @ApiOperation(value = "修改购物车商品数量")
    public R<String> update(
            @RequestHeader(value = "token", required = true) String token,
            @RequestBody ModifyBuyNumInCartDto buyNumDto) {
        String userId = JwtUtil.getValFromToken(token,"userId").toString();
        return cartService.update(userId,buyNumDto);
    }

    /**
     * 删除购物车商品
     *
     * @param token 用户id
     * @param prodId 商品id
     * @return R<String>
     */
    @DeleteMapping("/deleteByProId/{prodId}")
    @ApiOperation(value = "删除购物车商品")
    public R<String> deleteByProId(
            @RequestHeader(value = "token", required = true) String token,
            @PathVariable("prodId") Long prodId
    ) {
        Long userId = Long.valueOf(JwtUtil.getValFromToken(token,"userId").toString());
        return cartService.deleteByProId(userId,prodId);
    }

    /**
     * 清空购物车
     *
     * @param token 用户id
     * @return R<String>
     */
    @DeleteMapping("/deleteAll")
    @ApiOperation(value = "清空购物车")
    public R<String> deleteAll(
            @RequestHeader(value = "token", required = true) String token
    ) {
        String userId = JwtUtil.getValFromToken(token,"userId").toString();
        return cartService.deleteAll(userId);
    }

}
